﻿// ==========================================================================
// SourceFileContentConverter.cs
// Silverlight Shapes Library
// ==========================================================================
// Copyright (c) Silverlight Shapes Development Group
// All rights reserved.
// ==========================================================================

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;

namespace SD.Samples.Views
{
    /// <summary>
    /// Implements the <see cref="IValueConverter"/> interface to convert a list 
    /// of <see cref="SourceFileContent"/> objects to a collection of <see cref="TabItem"/> objects.
    /// </summary>
    public class SourceFileContentConverter : IValueConverter
    {
        /// <summary>
        /// Modifies the source data before passing it to the target for display in the UI.
        /// </summary>
        /// <param name="value">The source data being passed to the target.</param>
        /// <param name="targetType">The <see cref="T:System.Type"/> of data expected by the target dependency property.</param>
        /// <param name="parameter">An optional parameter to be used in the converter logic.</param>
        /// <param name="culture">The culture of the conversion.</param>
        /// <returns>
        /// The value to be passed to the target dependency property.
        /// </returns>
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            IEnumerable<SourceFileContent> sourceFiles = value as IEnumerable<SourceFileContent>;

            if (sourceFiles != null)
            {
                List<TabItem> tabs = new List<TabItem>();

                foreach (SourceFileContent sourceFile in sourceFiles.OrderBy(x => x.FileName))
                {
                    tabs.Add(new TabItem { Header = sourceFile.FileName, Content = new SourceFileViewer { Source = sourceFile.Content } });
                }

                return tabs;
            }
            else
            {
                return DependencyProperty.UnsetValue;
            }
        }

        /// <summary>
        /// Modifies the target data before passing it to the source object.  This method is called only in <see cref="F:System.Windows.Data.BindingMode.TwoWay"/> bindings.
        /// </summary>
        /// <param name="value">The target data being passed to the source.</param>
        /// <param name="targetType">The <see cref="T:System.Type"/> of data expected by the source object.</param>
        /// <param name="parameter">An optional parameter to be used in the converter logic.</param>
        /// <param name="culture">The culture of the conversion.</param>
        /// <returns>
        /// The value to be passed to the source object.
        /// </returns>
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}
